/*
 *
 *  Copyright (C) 2012-2024
 *  All rights reserved, Designed By 杭州连线客信息技术有限公司
 *  注意：
 *  本软件为杭州连线客信息技术有限公司开发研制，未经购买不得使用
 *  购买后可获得全部源代码（禁止转卖、分享、上传到码云、github等开源平台）
 *  一经发现盗用、分享等行为，将追究法律责任，后果自负
 *
 */

package org.dromara.web.controller.miniapp;


import cn.binarywang.wx.miniapp.api.WxMaLinkService;
import cn.binarywang.wx.miniapp.bean.shortlink.GenerateShortLinkRequest;
import cn.binarywang.wx.miniapp.bean.urllink.GenerateUrlLinkRequest;
import cn.dev33.satoken.annotation.SaIgnore;
import cn.hutool.core.date.DateUtil;
import com.lxk.miniapp.config.WxMaConfiguration;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import me.chanjar.weixin.common.error.WxErrorException;
import org.dromara.common.core.domain.R;
import org.springframework.web.bind.annotation.*;

/**
 *
 */
@Slf4j
@RestController
@RequestMapping("/wx/user/miniapp/link/{appid}")
@RequiredArgsConstructor
public class WxLinkController {


    /**
     * 获取小程序的短链接
     *
     * @param appid
     * @param pageUrl 路径如：pages/home/index
     * @return
     */
    @SaIgnore
    @GetMapping("shortLink")
    public R<String> getShortLink(@PathVariable String appid,
                                  @RequestParam String pageUrl
                                  ) {
        WxMaLinkService linkService = WxMaConfiguration.getMaService(appid).getLinkService();
        GenerateShortLinkRequest request = GenerateShortLinkRequest.builder()
            .pageUrl(pageUrl)
            .pageTitle("首页")
            .isPermanent(true).build();
        try {
            String shortLink = linkService.generateShortLink(request);
            return R.ok(shortLink);
        } catch (WxErrorException e) {
            log.error("shortLink build error:", e);
        }
        return R.fail("生成失败");
    }

    /**
     * 获取微信短链
     *
     * @param appid
     * @param pageUrl    通过 URL Link 进入的小程序页面路径，必须是已经发布的小程序存在的页面
     * @param query      参数 URL Link 进入小程序时的query，最大1024个字符，只支持数字，大小写英文以及部分特殊字符：!#$&'()*+,/:;=?@-._~
     * @param envVersion
     * @return
     */
    @GetMapping("shortUrlLink")
    public R<String> getUrlLink(@PathVariable("appid") String appid,
                                @RequestParam String pageUrl,
                                @RequestParam String query,
                                @RequestParam(defaultValue = "release", required = false) String envVersion) {
        try {
            // 计算30天后的时间
            long after30Days = DateUtil.offsetDay(DateUtil.date(), 30).getTime();
            WxMaLinkService linkService = WxMaConfiguration.getMaService(appid).getLinkService();
            GenerateUrlLinkRequest request = GenerateUrlLinkRequest.builder()
                .envVersion(envVersion)
                .path(pageUrl)
                .query(query)
                .expireType(0)
                .expireTime(after30Days)
                .build();
            String s = linkService.generateUrlLink(request);
            return R.ok("", s);
        } catch (WxErrorException e) {
            log.error("shortLink build error:", e);
        }
        return R.fail("生成失败");
    }
}
